Programmers often play multiple roles including web designer, user interface (LU) expert, servlet programmer, etc. Switching between roles often includes switching between multiple languages such as Java, JavaScript, PHP, etc. Programmers can often code with certain assumptions about semantics (based, for example, on the language in which he or she is most proficient), but such assumptions can be incorrect. Language differences can be derived from language features and/or standard library functions coming from different languages that may look, similar but differ in semantics, and such differences can be a potential sources of bugs.
The need for working on individual programming languages cannot be eliminated, as any abstract layer laid over a set of programming languages may not be flexible enough to model all requirements. Additionally, new libraries continue to be added to existing languages.